package org.xp.judgeplatform.service;

import org.xp.judgeplatform.common.PageResult;
import org.xp.judgeplatform.pojo.dto.LoginDevices.LoginDevicesRecordDTO;
import org.xp.judgeplatform.pojo.vo.LoginDevicesVO.LoginDevicesVO;

/**
 * 登录设备服务接口
 */
public interface LoginDevicesService {

    /**
     * 记录登录设备
     *
     * @param recordDTO 登录设备记录信息
     * @return 登录设备VO
     */
    LoginDevicesVO recordLoginDevice(LoginDevicesRecordDTO recordDTO);

    /**
     * 分页获取用户的登录设备列表
     *
     * @param userId   用户ID
     * @param pageNum  页码
     * @param pageSize 每页数量
     * @return 分页结果
     */
    PageResult<LoginDevicesVO> getUserDevices(Integer userId, Integer pageNum, Integer pageSize);

    /**
     * 获取当前设备信息
     *
     * @param userId   用户ID
     * @param deviceId 设备ID
     * @return 设备信息
     */
    LoginDevicesVO getCurrentDevice(Integer userId, String deviceId);

    /**
     * 登出指定设备
     *
     * @param userId   用户ID
     * @param deviceId 设备记录ID
     */
    void logoutDevice(Integer userId, Long deviceId);

    /**
     * 登出所有其他设备
     *
     * @param userId          用户ID
     * @param currentDeviceId 当前设备ID（不登出）
     */
    void logoutAllOtherDevices(Integer userId, String currentDeviceId);

    /**
     * 删除设备记录
     *
     * @param userId   用户ID
     * @param deviceId 设备记录ID
     */
    void deleteDevice(Integer userId, Long deviceId);

    /**
     * 更新设备名称
     *
     * @param userId     用户ID
     * @param deviceId   设备记录ID
     * @param deviceName 新的设备名称
     */
    void updateDeviceName(Integer userId, Long deviceId, String deviceName);

    /**
     * 更新设备最后登录时间
     *
     * @param userId   用户ID
     * @param deviceId 设备ID
     */
    void updateLastLoginTime(Integer userId, String deviceId);
}
